﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace MethodeSurchargee1
{
    public class Document
    {
        private static string _path;
        public string GetPath()
        {
            return _path;
        }
        public string GetContentPath()
        {
            return _path + ".txt";
        }
        public static bool IsDocumentFileExists(Document document)
        {
            return File.Exists(document.GetPath());
        }
    }

    interface ISurchare
    {
         string GenerateName(string name);    
         string GenerateName(object name);    
         string GenerateName(string name, string firtname = "");
         void GenerateName(int name);

         void F();                     // F()
         void F(int x);                  // F(int)
         void F(ref int x);            // F(ref int)
         void F(int x, int y);         // F(int, int)
         int F(string s);               // F(string)
        // int F(int x);                  // F(int)         error
         void F(string[] a);            // F(string[])
         //void F(params string[] a);      // F(string[])      error

        //ref et out (Section 10.5.1) font partie d'une signature. Ainsi, F(int)et F(ref int) sont des signatures uniques. 

        //La signature d'une méthode ne contient pas spécifiquement le type de retour ni le modificateur params 
        //qui peut être spécifié pour le paramètre le plus à droite.
       
    }
    class Surcharge
    {
        public string GenerateName(string name)
        {
            return name;
        }

        private string GenerateName(object name)
        {
            return (string) name;
        }

        public string GenerateName(string name, string firtname="")
        {
            return name + " " + firtname;
        }

        private void GenerateName(int name)
        {          
        }
        /*
        public StringBuilder GenerateName(string name) // meme type de paramètre déjà existe.
        {
            StringBuilder t = new StringBuilder();
            return t;
        }
         * 
         * */

    }
       
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}
